#include "library.h"


VerifyCode verify_code = {0, 0, 0, 0};

// 清空输入缓冲区
void clearInputBuffer() {
    while (getchar() != '\n');
}



// 生成随机验证码（6位）
int generate_verify_code() {
    verify_code.code = rand() % 900000 + 100000;
    verify_code.generate_time = time(NULL);
    verify_code.error_attempts = 0;
    verify_code.is_valid = 1;
    return verify_code.code;
}


// 发送模拟验证码（终端显示）
void send_mock_verify_code(const char* account) {
    int code = generate_verify_code();
    printf("【模拟短信】\n");
    printf("账号 %s，您的图书管理系统验证码为：%d\n", account, code);
    printf("该验证码5分钟内有效，输入错误超过3次将失效。\n");
}

// 校验验证码
int verify_verify_code(int input_code) {
    // 检查超时（5分钟=300秒）
    if (time(NULL) - verify_code.generate_time > 300) {
        verify_code.is_valid = 0;
        printf("验证码已超时！请重新获取。\n");
        return 0;
    }
    
    // 检查是否有效
    if (!verify_code.is_valid) {
        printf("验证码已失效！请重新获取。\n");
        return 0;
    }
    
    // 校验输入
    if (input_code == verify_code.code) {
        verify_code.is_valid = 0;  // 验证后失效
        printf("验证码正确！\n");
        return 1;
    } else {
        verify_code.error_attempts++;
        printf("验证码错误！剩余尝试次数：%d/3\n", 3 - verify_code.error_attempts);
        if (verify_code.error_attempts >= 3) {
            verify_code.is_valid = 0;
            printf("验证码因多次错误失效！\n");
        }
        return 0;
    }
}


//回调函数
int CheckCallBack(void *data, int argc, char **argv, char **colname)
{
    int *res=(int*)data;
    *res=1;
    return 0;
}



long manual_time_diff(const char* start_time, const char* end_time) 
{
    int s_year, s_month, s_day, s_hour, s_min, s_sec;
    int e_year, e_month, e_day, e_hour, e_min, e_sec;
    
    // 解析开始时间
    sscanf(start_time, "%d-%d-%d %d:%d:%d", 
           &s_year, &s_month, &s_day, &s_hour, &s_min, &s_sec);
    
    // 解析结束时间
    sscanf(end_time, "%d-%d-%d %d:%d:%d", 
           &e_year, &e_month, &e_day, &e_hour, &e_min, &e_sec);
    
    // 转换为秒（简化版，未考虑闰年/月份天数差异）
    long start_seconds = s_year * 31536000L + 
                         s_month * 2678400L + 
                         s_day * 86400L + 
                         s_hour * 3600L + 
                         s_min * 60L + 
                         s_sec;
    
    long end_seconds = e_year * 31536000L + 
                       e_month * 2678400L + 
                       e_day * 86400L + 
                       e_hour * 3600L + 
                       e_min * 60L + 
                       e_sec;
    
    return end_seconds - start_seconds;
}



//回调函数
//若查询成功，则result变为1，否则任然为0；
int ReturnCallBack(void *data, int arc, char **arv, char **column)
{
    int*result=(int*)data;
    *result=1;
    return 0;
}

